﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace StockNet
{
    /// <summary>
    /// 
    /// 定义数据接收所用数据结构
    /// 
    /// </summary>
    public partial class StockReceiver
    {
        //////////////////////////////////////////////////////////////////////////////////
        // 文件类型数据包头
        //  注一:
        //	m_wDataType == FILE_HISTORY_EX      补充日线数据
        //				m_nPacketNum    = 记录数
        //
        //	m_wDataType == FILE_5MINUTE_EX      补充5分钟线数据
        //				m_nPacketNum    = 记录数
        //
        //	m_wDataType == FILE_MINUTE_EX       补充分时数据
        //				m_nPacketNum    = 记录数
        //
        //	m_wDataType == FILE_POWER_EX        补充除权数据
        //				m_nPacketNum    = 记录数
        //
        //	m_wDataType == FILE_BASE_EX         补充F10基本资料
        //				m_dwAttrib      = 股票证券市场
        //              m_szFileName    = 文件名称
        //              m_dwLen         = 文件长度
        //				m_dwSerialNoorTime = 文件创建日期
        //
        //  m_wDataType == FILE_NEWS_EX         补充新闻数据
        //				m_dwAttrib      = 消息来源
        //              m_szFileName    = 包含目录的文件名,目录名为消息来源
        //				m_dwSerialNoorTime    = 序列号
        //				如:  "上交所消息\\0501Z012.TXT","新兰德\\XLD0001.TXT"
        //
        //  m_wDataType == FILE_HTML_EX         补充HTML文件
        //				m_dwAttrib 保留
        //              m_szFileName为URL
        //
        //	m_wDataType	== FILE_SOFTWARE_EX
        //				m_dwAttrib 分析软件类型, 用于初步判断
        //				m_szFileName 分析软件 ID 特征字符串 + '\\' + 文件名
        //				如 "TongShi\\TS\\RECEIVE\\RECEIVE.EXE",
        //				ID 特征字符串为 "TongShi", "TS\\RECEIVE\\RECEIVE.EXE" 为文件名
        //				特征字符串 和 文件名及其含义由分析软件商定义
        //  注二:
        //		数据文件循环播出,每个文件有唯一的序列号,以避免重复接收
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceiveData
        {
            public Int32 m_wDataType;           // 文件类型
            public Int32 m_nPacketNum;          // 记录数
            public Int32 m_dwAttrib;            // 文件子类型
            public Int32 m_dwLen;               // 文件长度
            public Int32 m_dwSerialNoorTime;    // 文件序列号或时间
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string m_szFileName;         // 文件名 or URL
            public Int32 m_bDISK;               // 文件是否已存盘的文件
            public IntPtr m_pData;
        };

        // 补充数据包头
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceiveFileHead
        {
            public UInt32 m_dwHeadTag;          // EKE_HEAD_TAG
            public UInt16 m_wMarket;            // 市场类型
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string m_szLabel;            // 股票代码
        };

        // 补充历史数据包 32 字节
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceiveHistoryFilePack
        {
            public Int32 m_time;               // UCT
            public Single m_fOpen;             // 开盘      
            public Single m_fHigh;             // 最高
            public Single m_fLow;              // 最低
            public Single m_fClose;            // 收盘
            public Single m_fVolume;           // 量
            public Single m_fAmount;           // 额
            public UInt16 m_wAdvance;          // 涨数,仅大盘有效
            public UInt16 m_wDecline;          // 跌数,仅大盘有效
        };

        // 补充分时数据包 16 字节
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceiveMinuteFilePack
        {
            public Int32 m_time;            // UCT
            public Single m_fPrice;         // 价格
            public Single m_fVolume;        // 成交量
            public Single m_fAmount;        // 成交额
        };

        // 补充除权数据包 20 字节
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceivePowerFilePack
        {
            public Int32 m_time;            // UCT
            public Single m_fGive;          // 每股送
            public Single m_fPei;           // 每股配
            public Single m_fPeiPrice;      // 配股价,仅当 m_fPei!=0.0f 时有效
            public Single m_fProfit;        // 每股红利
        };

        // 行情数据包
        [StructLayout(LayoutKind.Sequential)]
        public struct ReceiveReportPack
        {
            public UInt16 m_cbSize;                                 // 结构大小
            public Int32 m_time;                                    // 交易时间
            public UInt16 m_wMarket;                                // 股票市场类型
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string m_szLabel;                                // 代码
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string m_szName;                                 // 名称

            public Single m_fLastClose;                             // 昨收
            public Single m_fOpen;                                  // 今开
            public Single m_fHigh;                                  // 最高
            public Single m_fLow;                                   // 最低
            public Single m_fNewPrice;                              // 最新
            public Single m_fVolume;                                // 成交量
            public Single m_fAmount;                                // 成交额

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public Single[] m_fBuyPrice;                            // 申买价1,2,3
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public Single[] m_fBuyVolume;                           // 申买量1,2,3
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public Single[] m_fSellPrice;                           // 申卖价1,2,3
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public Single[] m_fSellVolume;                          // 申卖量1,2,3

            public Single m_fBuyPrice4;                             // 申买价4
            public Single m_fBuyVolume4;                            // 申买量4
            public Single m_fSellPrice4;                            // 申卖价4
            public Single m_fSellVolume4;                           // 申卖量4

            public Single m_fBuyPrice5;                             // 申买价5
            public Single m_fBuyVolume5;                            // 申买量5
            public Single m_fSellPrice5;                            // 申卖价5
            public Single m_fSellVolume5;                           // 申卖量5

        };
    }
}
